
/**
 * @info    Klasse, welke betalingen afhandeld t.b.v. de Kantine Simulatie
 * @author  (Stephan Veenstra, Michel Jansma) 
 * @version (1.8)
 */

public class Canteen {

    //Instantie variabelen definiëren van het type CheckoutLine
    private CheckoutLine line;
    //Instantie variabelen definiëren van het type Checkout
    private Checkout checkout;
    
    private CanteenSupply supply;

    public Canteen() {
        //Instantie variabele line initialiseren
        this.line     = new CheckoutLine();
        //Instantie variabele checkout initialiseren
        this.checkout = new Checkout(this.line);
    }
    
    /**
     * @method personGetTrayConnectLine
     * @params null
     * @info   Kiest een persoon met een dienblad en artikelen.
     * @return null
     */
    public void personGetTrayConnectLine(Person person, String[] articleNames) {
        //maak een tray voor deze persoon.
        Tray dienblad = new Tray();
        
        //voeg de artikelen toe aan de tray voor deze persoon.
        for(String artikel : articleNames){
            Article checkArtikel = supply.getArticle(artikel);
            dienblad.setArticle(checkArtikel);
            supply.checkSupply(artikel);
  
        }
        
        //koppel de tray aan de persoon.
        person.setTray(dienblad);
        
        //Voeg deze persoon toe aan de rij.
        this.line.addToLine(person);
    }
    
    
    /**
     * HANDLE METHODES
     */
    
    /**
     * @method handleCheckoutLine
     * @params null
     * @info   Kassarij afwerken
     * @return null
     */
    public void handleCheckoutLine() {
        while(this.line.getLine()) {
            this.checkout.payBil(this.line.removeFirstPersonLine());
        }
    }
    
    /**
     * GETTER METHODES
     */
    
    /**
     * @method getCheckout
     * @params null
     * @info   Retourneer instantie variabele checkout
     * @return <Checkout> checkout
     */
    public Checkout getCheckout() {
        return this.checkout;
    }
    
    
    /**
     * @method  getSupply
     * @param   null
     * @info    Retouneer de lijst met voorraad.
     * @return  CanteenSupply 
     */
    public CanteenSupply getSupply(){
        return this.supply;
    }

   
    /**
     * SETTER METHODS
     */
    
    /**
     * @method  setSupply
     * @param   null
     * @info    Maak de voorraad van de kantine aan.
     * @return  null
     */
    public void setSupply(CanteenSupply supply){
        this.supply = supply;
    }
}
